import React from 'react'
/**
 * ES6的继承
 * 1、继承的例子
 * 1）动物分类食草动物和食肉动物：
 * 2）车的例子
 * 2、继承的特征
 * 1）父类更抽象，子类更具体
 * 2) 子类可以扩展父类的行为和特征，父类拥有一般特性，子类拥有特殊特性和行为
 * 3、ES6的继承的步骤
 * 1）先定义父类
 * 2）定义子类
 * class 子类 extends 父类{
 *    
 * }
 * 3)通过方法的重写来完成
 * 4)在子类中单独来定义
 * 4、如何让子类的方法更加具体化
 * 可以使用方法重写来完成
 * 1）什么是方法的重写：所谓方法重写是指在继承关系中，子类的方法名称，参数列表和父类中的一样的称为方法重写
 * 2) 方法重写的结果是：子类中的方法完全覆盖父类中的方法的内容
 * 5、子类中方法怎么调用父类中方法
 * 通过super关键字实现
 * 1）子类中的成员方法要调用父类中的成员方法:super.父类中的方法
 * 注意：构造方法不能继承：你是你妈生的，你爸是你奶奶生
 * 注意：但是子类的构造方法要可以调用父类的构造方法
 * 2）子类的构造方法如何调用父类的构造方法
 * super()
 * 特别注意：子类的构造方法中如果要调用父类的构造方法，调用父类的构造方法必须放在首行
 * 总结：没有爸爸哪来儿子
 * 6、instanceof关键字的作用
 * 使用该关键字能够判断某个对象是否属于某个类型，能够提高代码的健壮性
 * 
 */
export default function App() {
  //实例化
  const javaTeacher=new JavaTeacher("潘峰","蜗牛学苑",20)
  const h5Teacher=new H5Teacher("何志超","蜗牛学苑")
  //通过的方法:instanceof关键字
  function printInfo(teacher){   
    if(teacher instanceof JavaTeacher){
        return teacher.writeNocasConfig()
    }else if(teacher instanceof H5Teacher){
        return teacher.writeUniapp()
    }
  }
  return (
    <div>
        <div>
            {javaTeacher.introduce()}<br/>
            {javaTeacher.giveLession()}<br/>
            {   
              printInfo(javaTeacher)
            }
        </div>
        <hr />
        <div>
            {h5Teacher.introduce()}<br/>
            {h5Teacher.giveLession()}<br/>
            {
                printInfo(h5Teacher)
            }
        </div>
    </div>
  )
}

class Teacher{
    constructor(name,school){
        this.name=name
        this.school=school
    }
    introduce(){
        return `我是${this.school}的${this.name}`
    }
    giveLession(){
        return `(1)讲解本章目标(2)讲解具体内容(3)安排今日作业`
    }
}
class JavaTeacher extends Teacher{
    constructor(name,school,javaAge){
      
       super(name,school)
       this.javaAge=javaAge
    }
    introduce(){
        return `${super.introduce()},java编程年限是:${this.javaAge}年`
    }
    giveLession(){
        return `准备工作：打开IDEA${super.giveLession()}`   
    }
    writeNocasConfig(){
      return "我可以进行微服务开发";
    }
}
class H5Teacher extends Teacher{
    constructor(name,school){
        super(name,school)
    }
    writeUniapp(){
        return "我可以编写uniapp";
    }

}
